home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / datatypes / png_dt / png.guide (.txt) < prev    next >
Amigaguide Document  |  1996-04-07  |  78KB  |  1,527 lines

  1. @DATABASE PNG.guide
  2. @(C) "Copyright 
  3.  1995 Cloanto Italia srl"
  4. @$VER: PNG.guide 43.2 (1995-11-28)
  5. @NODE Main "PNG DataType"
  6. @{B}PNG Toolkit and the PNG DataType v. 43.2, by Cloanto@{UB} 
  7. When we heard news that several, very popular, graphics formats were
  8. menaced by software patents, at Cloanto we took a strong position in favor
  9. of a new, improved format: PNG (Portable Network Graphics).
  10. We are presenting here a PNG DataType for the Amiga, some background
  11. information on PNG, sample source code to use DataTypes and an ARexx
  12. script to automatically find GIFs and convert them to PNG. As the creators
  13. of Personal Paint, we've also included some information on that program.
  14. The DataType supports all types of PNG-encoded images. Grayscale images
  15. are converted to palette-based images. This version of the DataType
  16. supports 24-bit DataType tag extensions, and can pass true color data to
  17. supporting applications (e.g. Cybergraphics software). In a palette-based
  18. environment, true color (up to 48-bit) images are dithered using a fast
  19. Floyd-Steinberg method (more professional color quantization options are
  20. available in Personal Paint).
  21. This DataType also reads the Author, Copyright and Comment fields
  22. (DTA_ObjAuthor, DTA_ObjCopyright and DTA_ObjAnnotation DataType
  23. attributes). The included source code shows how to read this information.
  24. The Legal Notes contain a distribution license and other information.
  25. Your feedback is very appreciated.
  26. @{I}For more information: @{UI}
  27.  @{" Installation   " LINK Installation}              @{"   PNG   " LINK PNG}              @{"  DataTypes  " LINK DataTypes}
  28.  @{" Personal Paint " LINK PPaint}              @{" Cloanto " LINK Cloanto}              @{" Legal Notes " LINK Legal}
  29.  The material presented here and the name Cloanto are respectively
  30.   Copyright 
  31.  1995 and a registered trademark of Cloanto Italia srl. @{UI}
  32. @ENDNODE
  33. @NODE Installation "Installation"
  34. @TOC Main
  35. @{B}Installation@{UB}
  36. The PNG DataType can be installed with a double-click on the included
  37. Installer icon. This automatic installation procedure uses the Amiga
  38. Installer program, which must be stored in the SYS:Utilities directory of
  39. your system. Manual installation is described in the following lines.
  40. The PNG DataType can be installed by copying PNG to DEVS:DataTypes, and
  41. png.datatype to SYS:Classes/DataTypes. If the files are copied using Shell
  42. commands, the PNG icon file ("PNG.info") must also be copied manually (to
  43. DEVS:DataTypes).
  44. Users of Amiga systems with a 68020 or higher CPU can install a special
  45. version of the DataType, written to take advantage of new features of
  46. these more powerful CPUs. This file is named "png.datatype.020", and must
  47. be renamed to "png.datatype" once installed SYS:Classes/DataTypes. (This
  48. is also taken care of by the automatic installation script.)
  49. @{I}For more information: @{UI}
  50.  @{" PNG " LINK PNG}
  51.  @{" DataTypes " LINK DataTypes}
  52. @ENDNODE
  53. @NODE PNG "The PNG Format"
  54. @TOC Main
  55. @{B}The PNG Format@{UB}
  56. The PNG (Portable Network Graphics) file format was designed as a
  57. replacement and extension to GIF and LZW-based TIFF, after Unisys
  58. Corporation began demanding royalties on GIF/LZW code.
  59. PNG is gaining general recognition as the best lossless format for
  60. storing digital images. (JPEG remains recommended for storing real world
  61. images where minimum storage occupation is a priority and loss of
  62. information is acceptable.) PNG has the potential to replace both GIF and
  63. TIFF, and as a unifying force it should attract more attention beyond
  64. that.
  65. @{I}For more information: @{UI}
  66.  @{" PNG Letter " LINK PNG-Letter}
  67.  @{" CompuServe Announcement " LINK CompuServe-Announce}
  68.  @{" Article " LINK Article}
  69.  @{" PNG Specification " LINK PNG-Spec}
  70.  @{" GIF to PNG ARexx script " LINK GifToPng}
  71. @ENDNODE
  72. @NODE PNG-Letter "PNG Letter"
  73. @TOC PNG
  74. @{B}Graphics Community Endorses a New File Format@{UB}
  75. May 1, 1995. A coalition of major software developers, publishers and
  76. technical writers announced today its endorsement for the new PNG graphics
  77. format. PNG (Portable Network Graphics, pronounced "ping") is a flexible
  78. and open format for storing bitmapped graphics images. This effort began in
  79. late 1994, when CompuServe and Unisys stunned the online world by
  80. announcing that royalties would be required on the formerly freely used GIF
  81. file format.
  82. Several companies claim a patent on the LZW compression algorithm, which is
  83. an integral part of the GIF file format. Unisys is now requiring
  84. developers, publishers, and vendors to pay royalties on any software that
  85. either creates or displays GIF files. In response to this announcement,
  86. developers hastened to replace the GIF file format with an improved
  87. royalty-free format. A coalition of experienced independent graphics
  88. developers from the Internet and CompuServe formed a working group and
  89. proceeded to design the new format. The result is the PNG format.
  90. PNG is a major advance over the venerable GIF format. By adopting PNG, you
  91. would not only be helping the computer graphics community free itself from
  92. the Unisys patent, but you would be enjoying the advantages of a powerful
  93. new graphics file format. Converting your GIF collections to PNG offers the
  94. following benefits:
  95.  * PNG retains GIF's strength as a simple and portable graphics format.
  96.  * PNG's compression method has been thoroughly researched and judged
  97.    free from patent problems.
  98.  * PNG allows support for true color and alpha channel storage. Its
  99.    extensible structure leaves room for future requirements.
  100.  * PNG's feature set allows conversion of all GIF files.
  101.  * On average, PNG files are smaller than GIF files.
  102.  * PNG offers a new, more visually appealing, method for progressive
  103.    display than the scanline interlacing used by GIF.
  104.  * PNG is designed to support full file integrity checking as
  105.    well as simple, quick detection of common transmission errors.
  106.  * Implementations of PNG are royalty-free.
  107. The advantages of making PNG an industry-standard file format are clear. We
  108. are now presented with a rare opportunity to move forward in the area of
  109. royalty-free graphics display and archiving software. Please help with the
  110. adoption of PNG by supporting it as your preferred graphics file format.
  111. For more information, source code, file specifications, developer tools,
  112. and freeware file converters, you can contact the comp.graphics Internet
  113. newsgroups or the Graphics Support Forum on CompuServe (GO GRAPHSUP). For
  114. files, check the ftp.uu.net:/graphics/png directory, or email
  115. png-info@uunet.uu.net.
  116. Thank you for supporting this project.
  117. Signed by:
  118.  Michael Abrash, author, Zen of Graphics Programming
  119.  Michael Console Battilana, Cloanto (Personal Paint/Write, etc.)
  120.  Bradley Bell & Elizabeth Piegari, TriSoft (Depth Dwellers)
  121.  Andrei Belogortseff, ChaoSoft (FM StepUp, FM Toolbar, FM Guard, etc.)
  122.  C. Steven Blackwood, Cytherean Adventures (Cargo Bay)
  123.  Robert K. Blaine, ECONO-SOFT
  124.  John Bradley, author of XV
  125.  John Bridges, author of GRASP, PC Paint and PICEM
  126.  Rick Byrnes, The Software Development Group (NoteWorthy, MoneyWise,
  127.    Eventz, and various shareware products.)
  128.  Tony Caine, ARCaine Technology
  129.  George Campbell, OsoSoft (Winclip, etc.)
  130.  Mike Ceranski, President, Dvorak Development
  131.  Lee Crocker (Piclab, PGIF, GTools)
  132.  Karen Crowther, Redwood Games (Math Rescue, Word Rescue, Pickle Wars)
  133.  E. Nicholas Cupery, Farba Research (Farba Utilities (tm))
  134.  Thomas Boutell, author of the gd library and the World Wide Web FAQ
  135.  Gary Elfring, Elfring Soft Fonts (Clip Art)
  136.  Steve Estvanik, Cascoly Software (Winzle, Windows in Time, MVP Bridge)
  137.  Jim Faliveno, Monumental Computer Applications, Inc. (TagVue-CaddView)
  138.  Dan Farmer, POV-Team (POV-Ray)
  139.  Oliver Fromme, TBH-Softworx (QPEG, PicDex)
  140.  John Gallant, First Magnitude (3-Ball Juggler, Beat the Bomb, Math
  141.    Sampler)
  142.  Lawrence Gozum, author (VIDVUE)
  143.  Phil Grenetz, Ivden Technologies
  144.  Diana Gruber, Ted Gruber Software, Inc. (Fastgraph)
  145.  David Hofmann (Computer Graphics Artist, Germany)
  146.  Michael D. Jones, Insight Software Solutions (Finance/Hobbies/Word Games)
  147.  Lutz Kretzschmar, coauthor of Ray Tracing Worlds (Moray)
  148.  Tom Lane, organizer, Independent JPEG Group (IJG JPEG software)
  149.  Steve Lee (Atlantic Coast plc)
  150.  Ralph Mariano @ STReport International Online Magazine
  151.  David K. Mason, author of Morphing on Your PC, coauthor of Making Movies
  152.    on Your PC (DTA, DFV, DMorf)
  153.  Randy Maclean, Formgen Corp.
  154.  Brad McLane, Caladonia Systems Inc. (Code.Print, ToolThings)
  155.  Al Meadows/Fineware Systems (Author of Space Hound, Peeper, etc.)
  156.  Scott Miller, Apogee Software, Sultans of Shareware
  157.  Jeff Napier, Another Company (Computer Magic)
  158.  Peter Nielsen, Raja Thiagarajan, Julie England (PMView & PMSnap for OS/2)
  159.  David Noakes, Fugue Software
  160.  Dick Oliver, author of PC graphics books and software including
  161.    Tricks of the Graphics Gurus, PC Graphics Unleashed, and FractalVision
  162.  Dan Richardson, illustrator, author of Create Stereograms on Your PC
  163.  John Richardson, Rogue Marketing (Amazing Secrets Series, Gambling
  164.    Secrets, JobDisk)
  165.  Steve Rimmer, Alchemy Mindworks Inc. (Graphic Workshop, etc.)
  166.  Greg Roelofs, Info-ZIP (Zip, UnZip and related utilities)
  167.  Guy Eric Schalnat, Group 42 (PNGLIB, GraphX Viewer)
  168.  Paul Schmidt, Photodex Corporation, GDS (The Graphics Display System)
  169.  Monty Shelton, CrystalWorks (EZCosmos, SIRDS for NIRDS, Language Wiz)
  170.  Steve Sneed, Ozarks West Software, Inc. (OzCIS, OzWin, OZBEXT/OZGIF)
  171.  David Snyder, MVP Software (MVP Paint)
  172.  Chuck Steenburgh, Tay-Jee Software (Palantir for DOS & Windows, S.O.S.)
  173.  Peter Tiemann (author of TrueBase)
  174.  Glen Tippetts, NeoSoft Corporation (NeoPaint, NeoBook, etc.)
  175.  Rod Underhill, Computer Fine Artist (CIS Comic Forum's Underhill Gallery)
  176.  John Wagner (Improces)
  177.  Bruce F. Webster, Pages Software Inc (WebPages by Pages)
  178.  Tim Wegner, author of Image Lab and Fractal Creations (Fractint)
  179.  Rosemary West, R. K. West Consulting (By The Numbers, LoveDOS, etc.)
  180.  Thomas R. White, Recreational Engineering Associates (MultiMedia Swiss
  181.    Army Knife)
  182.  Charles L. Wiedemann, Rexxcom Systems (XL2001, E-Z-Book, etc.)
  183.  Terry Wilkinson, CIO, AffNet Publishing
  184.  Ben Williams, Black Belt Systems Inc. (WinImages, Imagemaster, etc.)
  185.  Jeff Woods, deltaComm Development, Inc. (Telix for Windows)
  186.  ---------------------------------
  187.  @{I}PLEASE COPY AND DISTRIBUTE WIDELY @{UI}
  188.  ---------------------------------
  189. @ENDNODE
  190. @NODE CompuServe-Announce "CompuServe Announcement"
  191. @TOC PNG
  192. @{B}CompuServe Announces PNG-Based Graphics Specification@{UB}
  193. @{I}Fully Open 24 Bit Graphics Capability for Electronic Graphics Exchange @{UI}
  194. COLUMBUS, Ohio, June 15, 1995 -- CompuServe Incorporated today announced
  195. the completion of a new 24-bit graphics specification that was announced
  196. earlier this year. This new, enhanced 24-bit lossless specification will
  197. offer the professional graphics community a significant enhancement to the
  198. earlier GIF 89a specification while also eliminating the proprietary LZW
  199. software, replacing it with compression technology compliant with the PNG
  200. (pronounced `ping') specification.
  201. "The new specification is a true 24-bit lossless format that will give
  202. users a 16 million color palette and represents a significant enhancement
  203. over the previous GIF technology," said Tim Oren, CompuServe vice
  204. president of future technology. "More importantly, this new specification
  205. has been created with tremendous attention to making it free, open and
  206. rights clear so that anyone can incorporate it into their products without
  207. fear of patent infringement."
  208. The new specification was developed as a collaboration between CompuServe
  209. and several key communities: The Internet PNG group led by Thomas Boutell,
  210. and including Jean-loup Gailly and Mark Adler, the developers of Deflate
  211. and Inflate; and the CompuServe online graphics forums (GO GRAPHICS).
  212. Ultimately, CompuServe's new graphics specification adopted compression
  213. technology that was based on the PNG specification. As a result of those
  214. efforts, CompuServe has determined that the PNG format closely meets the
  215. future requirements for graphics interchange on the Internet, on
  216. CompuServe and on other services. Based on current evaluation results, PNG
  217. will also be useful for exchange of information between graphics software
  218. products
  219. "Earlier this year, there was a great deal of attention paid to GIF on the
  220. Internet," continued Oren. "Much of it was constructive and served not
  221. only to move the 24-bit graphics project off the back burner, but also
  222. gave us connections to the Internet team which helped us create the new
  223. PNG-compatible graphics specification in only five months. This
  224. cooperative effort has benefited the whole online community and should
  225. serve as a model for how the Internet's positive and creative forces can
  226. be focused."
  227. PNG makes use of a data compression technology called `deflation' used in
  228. the freeware Info-Zip programs. CompuServe has adopted the PNG format and
  229. is creating a free toolkit that will create graphics meeting the PNG
  230. specification while avoiding patent concerns. The toolkit will be
  231. available within the next few weeks.
  232. Though CompuServe will hold a copyright on the toolkit, it is understood
  233. that its free distribution and use is encouraged and expected. To maintain
  234. the free and clear patent status of the new specification, it will not be
  235. backward compatible with the current GIF89a specification. Adoption of the
  236. new PNG-based specification will take place over time, allowing a smooth
  237. transition to the new format. CompuServe will also provide a conversion
  238. utility from GIF89a to PNG for use in conjunction with the CompuServe
  239. Information Services. This utility will be available within the next few
  240. weeks.
  241. The CompuServe Information Service continues to be the world's most
  242. successful and most popular online and Internet service with millions of
  243. members who go online from more than 3.1 million active, paying accounts
  244. in more than 150 countries. The undisputed industry leader in innovation,
  245. the service offers global email, the industry's first CD-ROM supplement,
  246. libraries of free software, selected 28.8 kbps access and worldwide direct
  247. Internet access services. For a free introductory CompuServe membership,
  248. call 800-524-3388 and ask for representative number 664, or access
  249. CompuServe's home page on the World Wide Web (http://www.compuserve.com).
  250. In addition to the CompuServe Information Service, CompuServe offers
  251. networking, Internet services, electronic mail and business information
  252. services to major corporations worldwide.
  253. CompuServe is an H&R Block (NYSE: HRB) company.
  254. @ENDNODE
  255. @NODE Article "From GIF to PNG"
  256. @TOC PNG
  257. @{B}The GIF Controversy: A Software Developer's Perspective@{UB}
  258. January 27, 1995 - Text revision 2 - March 31, 1995
  259. Copyright 
  260.  1995 Cloanto Italia srl, All rights reserved
  261. Parts are quoted with permission from CompuServe Information Service
  262. Parts are excerpted from the PNG specification
  263. This article was written with great care. It may reflect personal
  264. opinions of the author, which are not necessarily shared by the
  265. publishers, who cannot assume any responsibility for mistakes or
  266. misprints. Nothing in this article should be regarded as legal
  267. counsel. If you require legal or other expert assistance, you should
  268. consult a professional advisor. Many of the designations used by
  269. manufacturers and sellers to distinguish their products are
  270. trademarks. The author of this article has made every attempt to
  271. supply trademark information about manufacturers and their products.
  272. GIF and Graphics Interchange Format are service marks of CompuServe
  273. Inc., an H&R Block Company. PostScript is a registered trademark of
  274. Adobe Systems Inc. TIFF is a trademark of Aldus Corp.
  275.  @{" Abstract " LINK Article 38}
  276.  @{" Introduction " LINK Article 51}
  277.  @{" Software Patents " LINK Article 172}
  278.  @{" 10 Years of LZW " LINK Article 209}
  279.  @{" December 29, 1994 - The Days After " LINK Article 319}
  280.  @{" Reference " LINK Article 442}
  281.  @{" Bibliography " LINK Article 536}
  282. @{B}Abstract@{UB}
  283. During the past eight years, GIF (Graphics Interchange Format) peacefully
  284. became the most popular file format for archiving and exchanging computer
  285. images. At the end of December 1994, CompuServe Inc. and Unisys
  286. Corporation announced to the public that developers would have to pay a
  287. license fee in order to continue to use technology patented by Unisys in
  288. certain categories of software supporting the GIF format. These first
  289. statements caused immediate reactions and some confusion. As a longer term
  290. consequence, it appears likely that GIF will be replaced and extended by
  291. the new PNG (Portable Network Graphics) format.
  292. @{B}Introduction@{UB}
  293. This is a very interesting case, which could teach more than one lesson on
  294. the theory and practice of software and the laws. There are many entities
  295. involved. Fingers have been pointed at lawmakers, Unisys, CompuServe and
  296. developers. In theory, it may have been possible for any or all of these
  297. parts to prevent the matter from creating so much anxiety in the first
  298. place. Yet we are all here, debating on this issue. This article intends
  299. to provide a collection of information from the history of the controversy
  300. to the most recent events, as they were perceived by a software
  301. developer.
  302. CompuServe released GIF as a free and open specification in 1987. GIF soon
  303. became a world standard, and also played an important role in the Internet
  304. community. It was well supported by CompuServe's Information Service, but
  305. many developers wrote (or acquired under license) software supporting GIF
  306. without even needing to know that a company named CompuServe existed. GIF
  307. was relatively simple, and very well documented in books, articles and
  308. text files.
  309. GIF images are compressed to reduce the file size. The technique used to
  310. compress the image data is called LZW (after Lempel-Ziv-Welch) and was
  311. first described by Terry A. Welch in the June 1984 issue of IEEE's
  312. Computer magazine. Unisys holds a patent on the procedure described in the
  313. article, but the article describing the algorithm had no mention of this.
  314. The LZW procedure was simple and very well described, and it soon became a
  315. very popular technique for data compression (just as GIF would become a
  316. standard in its own field). It appears that neither CompuServe, nor the
  317. CompuServe Associate who designed GIF, nor the computer world in general
  318. were aware of the patent. GIF is not alone in the use of LZW. The TIFF
  319. file specification also includes LZW-compression among its compression
  320. methods, and so do dozens of very popular file archiving programs (such as
  321. Compress).
  322. While having the right to pursue legal action or seek damages against
  323. infringing LZW developers and publishers, Unisys has so far been very
  324. accomodating and fair. It is likely that the success of LZW and its
  325. thousands of implementations, especially among small developers, caught
  326. Unisys unprepared. Otherwise, it would be difficult to understand how
  327. Unisys could first allow a very large number of small and big developers
  328. to use LZW for years, and then, after the establishment of various
  329. standards based on LZW, change its attitude.
  330. The original CompuServe/Unisys licensing agreement text which had upset so
  331. many developers was immediately followed by clarifications from both
  332. CompuServe and Unisys. Given that the online community tends to be
  333. suspicious about anything that is big, has a legal department or owns
  334. software patents, Unisys had to face a particularly delicate challenge.
  335. But it probably wasn't easier for CompuServe, who had to explain the
  336. patent issue to its own developers, some of whom felt "betrayed". The
  337. outside world would learn about this issue from the press in the following
  338. days.
  339. Even Time Magazine reported about this matter, although like most of the
  340. newspapers it concentrated on GIF more than on TIFF, LZW, Unisys or
  341. software patents. In the meantime, a group of leaders of the online
  342. graphics community began working on a patent-free future of GIF. These
  343. efforts would later converge into the PNG specification. The full texts of
  344. official statements from CompuServe and Unisys are also included at the end
  345. of this article (see @{" Reference " LINK Article 442}).
  346. Among the first reactions, some bulletin board systems had all GIF files
  347. deleted from their hard disks (or converted into JPEG format). Common
  348. remarks included:
  349.     "PROTEST OF NEW COMPUSERVE-UNISYS GIF USAGE TAX !!"
  350.     "They [CompuServe] seem to think that GIF is the greatest thing
  351.     since free online magazines."
  352.     "The announcement by CompuServe and Unisys that users of the GIF
  353.     image format must register by January 10 and pay a royalty or face
  354.     lawsuits for their past usage, is the online communications
  355.     community's equivalent of the sneak attack at Pearl Harbor."
  356. These reactions may require some clarification.
  357. Unisys, and not CompuServe, has been "trying to impose" a royalty. The
  358. problem is not specific to GIF, but includes TIFF and archiving software.
  359. GIF files are not covered by the patent. There is no risk in distributing
  360. GIF files or in using the GIF name. According to a CompuServe
  361. spokesperson,
  362.     "Recent discussions of GIF taxes and fees are totally without
  363.     merit. For people who view GIF images, who keep GIF images on
  364.     servers, or who are creating GIF images for distribution, the
  365.     recent licensing discussions have no effect on their activities."
  366. Only the software employing the LZW algorithm for writing GIF files is "at
  367. risk". The Unisys patent includes claims which specifically cover the
  368. decompression of LZW-compressed material, so it may also affect simple GIF
  369. readers. Several patent attorneys consulted on this matter have concluded
  370. that decompression-only programs do not infringe upon the Unisys patent.
  371. Unisys however does not appear to share this opinion.
  372. A format such as JPEG cannot be used as a substitute for GIF. Unlike GIF
  373. (and PNG), JPEG was designed as a "lossy" format. This means that it
  374. slightly changes an image as it is compressed. This is unacceptable for
  375. many applications. Also, while JPEG excels in compressing real world true
  376. color images, it offers no support for palette-based images.
  377. The CompuServe licensing agreement was intended as a voluntary service to
  378. the few dozen developers creating software for use primarily in
  379. conjunction with the CompuServe Information Service (CIS). This includes
  380. applications such as CompuServe "navigators", but does not apply to
  381. general purpose GIF readers/writers (which are not intended for use
  382. primarily in conjunction with CIS).
  383. On January 27, 1995, Unisys announced new licensing policies regarding
  384. "The Welch Patent". These include a .45% royalty on the total unit selling
  385. price of GIF/LZW products (minimum $0.10, maximum $10.00 per unit) and a
  386. .65% royalty on GIF/TIFF/LZW products (minimum $0.20, maximum $25.00). For
  387. further information and a copy of the written agreement it is possible to
  388. call Unisys at +1 215 986-4411, or send E-mail to <lzw_info@unisys.com>.
  389. Any organization using LZW should look at whether they have an
  390. infringement on Unisys' patent. CompuServe is not involved in any of these
  391. discussions - they are between Unisys and outside developers.
  392. @{B}Software Patents@{UB}
  393. Normally, procedures such as LZW are published in magazines so that they
  394. can be shared by the community of software developers. LZW itself is a
  395. refinement of other algorithms published in the years before (Ziv-Lempel
  396. and others). Software is usually protected by copyright law, but in recent
  397. years (since 1981 in the USA) in several countries it has become possible
  398. to patent software. Initially, only software used to control hardware
  399. could be patented. This interpretation was soon extended to include all
  400. types of software (except for "pure mathematical algorithms"). While
  401. software patents have become an opportunity for many, they remain a
  402. controversial danger for others. Any programmer or publisher might be
  403. trapped at any time by a patent infringement claim that could not be
  404. foreseen or avoided.
  405. Publication of an algorithm in a magazine does not automatically exclude a
  406. patent application. In many countries, including the USA, it is possible
  407. to apply for a patent and still publish the paper without mention of the
  408. application. In the USA (but not in many other countries), the patent
  409. application may even be filed within 12 months of the publication. Under
  410. such regulations, the only algorithms that might be used freely and
  411. without risk would be those published prior to 1981 (e.g. Donald Knuth's
  412. "The Art of Computer Programming").
  413. Today, even designing a graphics file format can become a programmer's
  414. nightmare. One very active member of the Internet community (and author of
  415. the GZIP compressor) has collected information on more than 350 patents on
  416. lossless data compression and 100 on lossy image compression. Lempel, Ziv,
  417. Cohn and Eastman patented their original LZ78 algorithm (US patent
  418. 4,464,650). The LZW algorithm which is now attracting so much attention is
  419. patented by both IBM (4,814,746) and Unisys (4,558,302), while British
  420. Telecom (BT) holds a similar patent. The IBM patent application was filed
  421. three weeks before that of Unisys, but the US patent office apparently
  422. failed to recognize that they covered the same algorithm. (The IBM patent
  423. is more general, but its claim 7 is said to be exactly LZW.)
  424. @{B}10 Years of LZW@{UB}
  425. While the original article on LZW was published in 1984, the LZW patent
  426. issue first surfaced in the press in 1989, when the BTLZ algorithm (a
  427. procedure similar to LZW developed and patented by British Telecom) was to
  428. be approved for data compression into the V.42bis modem standard. Unisys
  429. said on at least one occasion that it first began to learn of the
  430. widespread use of LZW in connection with the development of this standard.
  431. The first licensing arrangements put into place included those with modem
  432. manufacturers ($ 20,000 for each one-time license) and with Adobe
  433. PostScript developers ($ 10,000).
  434. An article on "LZW Data Compression" was published in the October 1989
  435. issue of Dr. Dobb's Journal (see the @{" Bibliography " LINK Article 536} section for more
  436. details). A reader replied in the December issue explaining that the
  437. algorithm was patented. The author of the article added that he was
  438. unaware of any patent on the algorithm. More readers wrote, and in the
  439. March 1990 issue the editor-in-chief dedicated his Editorial to this
  440. topic, which in his words "sparked a forest of fires". The same issue
  441. also contained an official statement by Unisys Corporation, which
  442. confirmed that LZW was patented, mentioned the modem industry, and
  443. indicated how developers could contact Unisys.
  444. In the October 2, 1989 issue of PC Week a columnist wrote:
  445.     "Alas, there's no consolation for developers of archiving programs
  446.     that rely on the LZW data-compression algorithm. While cruising
  447.     the bulletin boards last week, Spencer learned that Unisys has a
  448.     patent on the algorithm, upon which a slew of data-compression
  449.     programs are based. Watch out."
  450. In about the same period, an article in InfoWorld mentioned the fact that
  451. modem manufacturers were facing the possibility of having to pay royalties
  452. to Unisys and to other patent holders for the right to use LZW.
  453. Page 132 ("LZWEncode Filter") of the PostScript Language Reference Manual,
  454. Second Edition, published in December 1990, contains the address of the
  455. Welch Licensing Department at Unisys Corporation.
  456. In the March 1991 issue of Byte, Steve Apiki ("Lossless Data Compression")
  457. explained that LZW is used in GIF, and that "The [LZW] algorithm itself is
  458. patented by Sperry [now Unisys]."
  459. At this point, at least the readers of some publications were potentially
  460. aware of the LZW patent. But still, there were few links to GIF. Unisys
  461. apparently didn't know about GIF, nor did most GIF developers know that
  462. GIF contained LZW technology. And those who may have known, not
  463. necessarily knew about the patent.
  464. This issue was also discussed among a small group of the better informed
  465. members of the CompuServe PICS Forum (now GRAPHSUP). The general feeling
  466. at that time was that "Unisys only intends to get royalties from hardware
  467. vendors," and there was some consensus on the idea that Unisys "wouldn't
  468. do anything about pure software implementations".
  469. Until the end of 1994, discussions on CompuServe's Information Service
  470. showed no clear mention of the requirement to get a license from Unisys
  471. for using LZW in GIF applications. During 1988 at least one developer
  472. stopped working on GIF tools because of considerations regarding the LZW
  473. patent, and reportedly "made CompuServe aware of it". This apparently was
  474. limited to private verbal conversations, and information on this behalf
  475. could be found neither in the press nor in CIS.
  476. Among the developers who contacted Unisys between the end of 1990 and the
  477. beginning of 1991, there was at least one GIF developer. He recently
  478. described his experience:
  479.     "Finding the right person was the most difficult part of licensing
  480.     LZW, but hopefully it's easier today (perhaps only 5 phone calls
  481.     would be needed!)... When talking to Unisys back then, my
  482.     recollection is that we had to basically tell the people at
  483.     Unisys, 'Believe me, you DO own a patent on LZW; who do we talk to
  484.     about LICENSING?' When we finally reached the licensing/legal
  485.     department, THEY knew they had a patent, and spelled out the
  486.     terms. I recall the person we were dealing with saying something
  487.     like, 'They [Unisys] laugh when I make all these $1 deals, but we
  488.     have to charge something to protect the patent.'"
  489. In those days, the standard license fee for PC-based software products was
  490. $1 per copy sold (or a 1% royalty), after a $100 advance payment.
  491. Apparently, Unisys still didn't know that GIF was based on LZW. In January
  492. 1995, Unisys stated: "Two years ago, Unisys learned that the LZW method
  493. was incorporated in the GIF specification and immediately began
  494. negotiations with CompuServe in January of 1993. We reached agreement with
  495. CompuServe on licensing the technology in June 1994..."
  496. Two years before the Unisys statement, at the end of 1992, Cloanto, an
  497. Italian software house, contacted Unisys because it was interested in a
  498. license for the possible use of LZW in its PostScript Level 2 drivers.
  499. That correspondence also mentioned GIF and TIFF as using LZW, and
  500. anticipated some of the controversies which would follow 25 months later.
  501. Unisys replied: "... You raise a number of interesting issues which
  502. require consideration..."
  503. While disclosing the full contents of this correspondence would probably
  504. not serve anyone's interest, the text of two letters sent to Unisys in
  505. 1992 is included at the end of this article, because the author feels that
  506. this 1992 perspective could complement the article with a few interesting
  507. ideas. The letters have not been edited, so some details (such as the
  508. reference to ZIP) may be incomplete with respect to current knowledge.
  509. Unisys offered Cloanto a $ .25 per unit royalty (1% of the net income) as
  510. an alternative to the PostScript one-time license, but did not answer the
  511. question raised by Cloanto: "If we implemented a software GIF or TIFF
  512. image file loader and saver (both formats are based on the LZW algorithm),
  513. would we need a license from Unisys Corp., as far as U.S. Patent 4,558,302
  514. is concerned?". According to public statements, Unisys did however contact
  515. CompuServe the following month.
  516. @{B}December 29, 1994 - The Days After@{UB}
  517. Between 1993 and 1994, the majority of developers still didn't know that
  518. GIF employed a patented algorithm, although both Unisys and CompuServe
  519. were aware of this (as the developers would learn in December 1994).
  520. Different opinions have been expressed on this. Some developers feel that
  521. reaching an agreement behind the scenes was the least destructive thing
  522. that could be done. Other (at times passionate) opinions picked up on
  523. electronic media are similar to these three:
  524.     "Consider this. CompuServe admits to knowing about patent problems
  525.     with the GIF file format as early as January of 1993. ... We added
  526.     GIF support to Fastgraph months after CompuServe admits knowledge
  527.     of the patent problem... We relied on the information that was
  528.     supplied to us by CompuServe. If CompuServe had told us the truth
  529.     when they knew it, we never would have added GIF support..."
  530.     "If I chose to put GIF encode/decode functions in my software
  531.     development toolkits, my main threat of legal liability would not
  532.     come from Unisys, but rather from one of my customers being sued
  533.     by Unisys, who would turn around and sue me for selling them some
  534.     code that contained patented algorithms."
  535.     "I still don't have a clue what my situation is if I want to sell
  536.     source and object code that imports and exports GIF images. I am
  537.     not in the end-user app business, but my customers are, and they
  538.     certainly will have to have an LZW license, but what about me?
  539.     I've talked with Unisys by voice and E-mail, and the voice
  540.     discussion was entirely unsatisfactory as I posted when it
  541.     happened - basically the Unisys guy said anyone who sells code for
  542.     $100-$300 a pop was a total _____ for selling it that cheap. The
  543.     E-mail discussions I've had said 'OK - we hear you - we'll get
  544.     back to you.' Never happened."
  545. Unisys replied in part with reassuring clarifications to the general
  546. public, explaining that if the software was developed prior to 1995, or if
  547. it is public domain or freeware, the developer need not to worry:
  548.     "... Unisys does not intend to pursue previous inadvertent
  549.     infringement by versions of GIF-based software products marketed
  550.     prior to 1995... Unisys does not require licensing, or fees to be
  551.     paid, for non-commercial, non-profit GIF-based applications,
  552.     including those for use on the online services... Commercial
  553.     developers... are expected to secure a licensing agreement with
  554.     Unisys for software products introduced beginning in 1995, or
  555.     enhancements of products that were introduced prior to 1995."
  556. However, these statements were followed by far more restrictive
  557. interpretations. It soon became clear that Unisys could be demanding
  558. royalties for everything "manufactured" after 1994. One developer
  559. contacted Unisys and reported:
  560.     "I called the Unisys lawyer you referred me to and he confirmed
  561.     this position. Even a book or CD containing *pre 1995* freeware is
  562.     subject to royalties if the disk is put together in 1995...
  563.     Royalties must be collected *again* for each update release."
  564. While the new Unisys licensing policies (announced on January 27, 1995)
  565. enabled many software publishers to again ship their products after a
  566. month-long pause, other developers preferred to wait, hoping for a
  567. patent-free evolution of GIF. Comments included:
  568.     "What if I sign up and then they announce a new GIF specification
  569.     which does not use LZW?"
  570.     "Labeling and user notification requirements in the agreement are
  571.     ridiculous. I understand their desire to 'spread the word' about
  572.     their patent, but they're telling me that I have to provide far
  573.     more info on their ownership of the patent than they require in
  574.     the docs/packaging of modem manufacturers and other users of LZW.
  575.     Fair is fair. A blurb in the online help and docs should be
  576.     sufficient; a 'non-defeatable' splash screen at startup is going
  577.     too far."
  578.     "Unisys is attempting to control how we (and other shareware
  579.     authors) do business, and to make us billboards for their LZW
  580.     patent... By making me tell my users how many security backups
  581.     they can make, etc., they're telling me how to run my business and
  582.     how to interface with my customers."
  583.     "Imagine the nightmare of having to pay royalties to 10 patent
  584.     holders, each of whom tells you how to run your business..."
  585.     "Unisys has given us a chance to work together to change the
  586.     system - rather than waiting to be sued one by one for this patent
  587.     or that. We can win the fight against software patents, if we
  588.     speak loud and clear against them."
  589. Some of the most active developers decided to collaborate on the design of
  590. a patent-free evolution of GIF (and TIFF's LZW compression mode). A
  591. variety of different procedures and data structures (such as Shannon-Fano
  592. and AVL trees) have been used to compress data in ways similar, if not
  593. equivalent, to LZW. But this diversity apparently does not escape the
  594. patent. As one expert said, "If the output data is GIF, the compressor
  595. infringes the Unisys patent regardless of the algorithm."
  596. On January 16, 1995, CompuServe declared its intention to coordinate the
  597. development of GIF24, a freely usable successor to GIF capable of 24-bit
  598. lossless compression. Several developers invested a lot of time and
  599. energies to solve the Unisys patent problem, and rapidly worked out
  600. different modifications to the GIF specification. One of the better known
  601. efforts was the project for a "GEF" graphics-exchange format. GEF and
  602. GIF24 converged into PNG (official abbreviation of "Portable Network
  603. Graphics", unofficially "Png is Not Gif").
  604. The open architecture of PNG preserves the simplicity that made GIF so
  605. popular, and adds features such as true color. Test results indicate that
  606. PNG is capable of (losslessly) compressing true color images better than
  607. any other widely used image format. It is also more effective than GIF in
  608. storing palette-based images. (More information on PNG is included in the
  609. Reference and Bibliography sections.)
  610. At the end, it appears that if so many efforts converge into a new,
  611. improved standard, we still have to give part of the credit to the LZW
  612. patent...
  613.     @{I}The author of this text can be contacted at <mcb@cloanto.it>.
  614.     Any comments, or experience you would like to share, would
  615.     be very appreciated. @{UI}
  616. @{B}Reference@{UB}
  617. If the excerpts from the PNG specification are not included here in order
  618. to keep the file size reasonable ("lossy compression"), please check for
  619. another file accompanying this text (suggested file name: "giflzw2.txt"),
  620. or send E-mail to <gltext2@cloanto.it> before June 30, 1995. The latest
  621. hypertext version of the full document is available on the World Wide Web:
  622. <URL:http://sunsite.unc.edu/boutell/png.html>
  623. -----------------------------------------------------------------------
  624. @{I}Excerpts from the  PNG (Portable Network Graphics) Specification,
  625.                        Ninth Draft - Revision date: 7 March, 1995 @{UI}
  626. [The text is not included here - Newer versions are available]
  627. -----------------------------------------------------------------------
  628. If the official texts from CompuServe and Unisys are not included here in
  629. order to keep the file size reasonable, please check for another file
  630. accompanying this text (suggested file name: "giflzw2.txt"), or send
  631. E-mail to <gltext2@cloanto.it> before June 30, 1995.
  632. -----------------------------------------------------------------------
  633. AGREEMENT FOR USE OF GRAPHICS INTERCHANGE FORMAT(SM)
  634. [The text of the Graphics Interchange Format (GIF) Developer Agreement,
  635.  released by CompuServe on December 29, 1994 is not included here.
  636.  It became obsolete when Unisys announced its new licensing policies
  637.  regarding "The Welch Patent" on January 27, 1995.]
  638. -----------------------------------------------------------------------
  639. -----------------------------------------------------------------------
  640.  %: 174559 S19/GIF/LZW Discussion  [GRAPHSUP]
  641.     04-Jan-95  17:07:50
  642. Sb: #GIF/LZW Clarification
  643. Fm: Larry Wood 76703,704
  644. To: All
  645. [The text is not included here]
  646. -----------------------------------------------------------------------
  647. -----------------------------------------------------------------------
  648.  #: 181065 S3/Hot News and Rumor
  649.     07-Jan-95  19:12:19
  650. Sb: #Unisys GIF Clarification
  651. Fm: Steve Ahlstrom/SYSOP 76703,2006
  652. To: All
  653. [The text is not included here]
  654. -----------------------------------------------------------------------
  655. -----------------------------------------------------------------------
  656. From: rmarks@ecdcsvr.tredydev.unisys.com (Richard Marks)
  657. Date: Fri, 6 Jan 1995 22:09:14 GMT
  658. Unisys LZW Patent FREQUENTLY ASKED QUESTIONS             January 6, 1995
  659. [The text is not included here]
  660. -----------------------------------------------------------------------
  661. If the texts of the two letters are not included here in order to keep the
  662. file size reasonable, please check for another file accompanying this text
  663. (suggested file name: "giflzw2.txt"), or send E-mail to
  664. <gltext2@cloanto.it> before June 30, 1995.
  665. -----------------------------------------------------------------------
  666. @{I}From Cloanto/Unisys - November 6, 1992 @{UI}
  667. [The text is not included here]
  668. -----------------------------------------------------------------------
  669. -----------------------------------------------------------------------
  670. @{I}From Cloanto/Unisys - November 12, 1992 @{UI}
  671. [The text is not included here]
  672. -----------------------------------------------------------------------
  673. @{B}Bibliography@{UB}
  674. Adobe Systems Incorporated
  675. "LZWEncode Filter"
  676. PostScript Language Reference Manual, Second Edition
  677. Addison-Wesley Publishing Company
  678. ISBN 0-201-18127-4
  679. Apiki, Steve
  680. "Lossless Data Compression"
  681. Byte, March 1991, pages 309-314, 386-387
  682. Association of Shareware Professionals Forum
  683. CompuServe GO ASPFORUM
  684. Bell, Timothy C., Cleary, John G. and Witten, Ian H.
  685. "Adaptive Dictionary Encoders"
  686. Text Compression
  687. Prentice Hall
  688. ISBN 0-13-911991-4
  689. Boutell, Thomas (Editor)
  690. PNG (Portable Network Graphics) Specification
  691. Ninth Draft - Revision date: 7 March, 1995
  692. Hypertext version available on the World Wide Web:
  693. <URL:http://sunsite.unc.edu/boutell/png.html>
  694. Clay, Betty
  695. "Texas Tales"
  696. ICPUG Newsletter, January/February 1995, pages 18-23
  697. Cloanto Italia srl
  698. Supplement to Personal Paint Manual
  699. Version 6.1/1995, January 27, 1995
  700. CompuServe Graphics Developers Forum (GO GRAPHDEV)
  701. CompuServe Graphics Support Forum (GO GRAPHSUP)
  702. Console Battilana, Michele
  703. "LZW Data Compression without Hashing"
  704. University of Udine Exam Project, July 9, 1987
  705. Elmer-Dewitt, Philip
  706. "Will Gates Get the Net?"
  707. Time, January 30, 1995, Page 47
  708. Erickson, Jonathan
  709. "Patent Letter Suits" (Editorial)
  710. Dr. Dobb's Journal, March 1990, page 6
  711. Erickson, Jonathan
  712. "The Green, Green Cash of Gnomes" (Editorial)
  713. Dr. Dobb's Journal, April 1995, page 6
  714. Gardner, Ray
  715. "LZW Patent Issues" (Letter)
  716. Dr. Dobb's Journal, December 1989, page 8
  717. Internet comp.graphics Newsgroups
  718. Internet comp.sys.graphics Newsgroup
  719. Knuth, Donald E.
  720. The Art of Computer Programming
  721. Volume 3 / Sorting and Searching
  722. Addison-Wesley Publishing Company
  723. ISBN 0-201-03803-X
  724. Landy, Gene K.
  725. The Software Developer's and Marketer's Legal Companion
  726. Addison-Wesley Publishing Company
  727. ISBN 0-201-62276-9
  728. Miles, J. B.
  729. "Patent Issues May Stall Approval of New V.42bis Modem Standard"
  730. InfoWorld, approximately fall of 1989, pages 43-44
  731. [Author, Article Title and Exact Date Unknown - Information Appreciated]
  732. [InfoWorld Article on LZW and Modem Implementations - Is this it?]
  733. Nelson, Mark R.
  734. "LZW Data Compression"
  735. Dr. Dobb's Journal, October 1989, pages 29-36, 86-87
  736. Nelson, Mark R.
  737. "LZW Patent Issues" (Reply to Letter)
  738. Dr. Dobb's Journal, December 1989, pages 8-12
  739. PNG (Portable Network Graphics)
  740. Information and support material available from:
  741.    Internet comp.graphics Newsgroups
  742.    Internet comp.sys.graphics Newsgroup
  743.    CompuServe Graphics Support Forum (GO GRAPHSUP)
  744.    Via FTP from <ftp://godzilli.cs.sunysb.edu/pub/ngf>
  745. The PNG specification is also available on the World Wide Web:
  746.    <URL:http://sunsite.unc.edu/boutell/png.html>
  747. "Spencer the Katt"
  748. PC Week, October 2, 1989
  749. Unisys Corporation
  750. "Patented Algorithms" (Letter)
  751. Dr. Dobb's Journal, March 1990, page 8
  752. Vaughan-Nichols, Steven J.
  753. "Saving Space", "Squeeze, Squash, and Crush" and "Legal Seagull"
  754. Byte, March 1990, pages 237-243
  755. Welch, Terry A.
  756. "A technique for high-performance data compression"
  757. IEEE Computer, June 1984, pages 8-19
  758. Ziv, Jacob and Lempel, Abraham
  759. "A universal algorithm for sequential data compression"
  760. IEEE Transactions on Information Theory, May 1977, pages 337-343
  761. Ziv, Jacob and Lempel, Abraham
  762. "Compression of individual sequences via variable-rate coding"
  763. IEEE Transactions on Information Theory, September 1978, pages 530-536
  764. @{I}Special thanks to Dave, David, Diana, Frank, Jason, Jean-loup, Jon, Kevin,
  765. Larry, Pierce, Richard, Tim, Tom and many others for their precious help. @{UI}
  766. @ENDNODE
  767. @NODE PNG-Spec "PNG Specification"
  768. @TOC PNG
  769. @{B}PNG (Portable Network Graphics) Specification@{UB}
  770. Information and support material is available from:
  771.    Internet comp.graphics Newsgroups
  772.    Internet comp.sys.graphics Newsgroup
  773.    CompuServe Graphics Support Forum (GO GRAPHSUP)
  774.    Via FTP from <ftp://godzilli.cs.sunysb.edu/pub/ngf>
  775. The PNG specification is also available on the World Wide Web:
  776.    <URL:http://sunsite.unc.edu/boutell/png.html>
  777. @ENDNODE
  778. @NODE GifToPng "GIF to PNG ARexx Script"
  779. @TOC PNG
  780. @{CODE}
  781. /* @{B}GifToPng.pprx - PPaint ARexx Script@{UB} - Copyright 
  782.  1995 Cloanto Italia srl
  783.   $VER: GifToPng.pprx 1.0
  784.   @{" More Comments " LINK GifToPngRem}
  785. MYPORT = 'PPAINT'
  786. IF ~SHOW('P', MYPORT) THEN DO
  787.   IF EXISTS('PPaint:PPaint') THEN DO
  788.     ADDRESS COMMAND 'Run >NIL: PPaint:PPaint'
  789.     DO 30 WHILE ~SHOW('P',MYPORT)
  790.        ADDRESS COMMAND 'Wait >NIL: 1 SEC'
  791.     END
  792.   END
  793.   ELSE DO
  794.     SAY "Personal Paint could not be loaded."
  795.     EXIT 10
  796.   END
  797. IF ~SHOW('P', MYPORT) THEN DO
  798.   SAY 'Personal Paint Rexx port could not be opened.'
  799.   EXIT 10
  800. ADDRESS VALUE MYPORT
  801. OPTIONS RESULTS
  802. OPTIONS FAILAT 10000
  803. Version 'REXX'
  804. IF RESULT < 2 THEN DO
  805.   errmess = 'This script requires a newer_version of Personal Paint.'
  806.   SAY errmess
  807.   RequestNotify 'PROMPT="'errmess'"'
  808.   EXIT 10
  809. LockGUI
  810. FreeBrush
  811. IF RC = 0 THEN RequestPath '"GifToPng target directory"'
  812. IF RC = 0 THEN DO
  813.   tmpfname = 'T:pprx_temp.'PRAGMA('ID')
  814.   ADDRESS COMMAND 'List >'tmpfname' 'RESULT' NOHEAD PAT=~(#?.info) LFORMAT="*"%s%s*"" ALL FILES'
  815.   IF OPEN('listfile', tmpfname, R) THEN DO
  816.     Get SETTING ICONS
  817.     iconmode = RESULT
  818.     errcode = 0
  819.     Set '"ICONS=3"'
  820.     DO FOREVER
  821.       curfname = READLN('listfile')
  822.       IF EOF('listfile') THEN BREAK
  823.       GetFileFormat curfname
  824.       IF RC = 0 THEN DO
  825.         IF UPPER(RESULT) = 'GIF' THEN DO
  826.           SAY 'Processing 'curfname
  827.           LoadBrush curfname FORCE
  828.           IF RC = 0 THEN DO
  829.             IF UPPER(RIGHT(curfname, 5)) = '.GIF"' THEN DO
  830.               len = LENGTH(curfname)
  831.               newfname = OVERLAY(D2C(C2D(SUBSTR(curfname, len-3, 1)) + 9), curfname, len-3)
  832.               newfname = OVERLAY(D2C(C2D(SUBSTR(curfname, len-2, 1)) + 5), newfname, len-2)
  833.               newfname = OVERLAY(D2C(C2D(SUBSTR(curfname, len-1, 1)) + 1), newfname, len-1)
  834.               IF EXISTS(SUBSTR(newfname,2,len-2)) = 0 THEN DO
  835.                 ADDRESS COMMAND 'Rename >NIL: 'curfname' 'newfname
  836.                 curiconfname = INSERT('.info', curfname, len-1)
  837.                 newiconfname = INSERT('.info', newfname, len-1)
  838.                 curfname = newfname
  839.                 IF EXISTS(SUBSTR(curiconfname,2,len+3)) THEN DO
  840.                   IF EXISTS(SUBSTR(newiconfname,2,len+3)) THEN
  841.                     ADDRESS COMMAND 'Delete >NIL: 'curiconfname
  842.                   ELSE
  843.                     ADDRESS COMMAND 'Rename >NIL: 'curiconfname' 'newiconfname
  844.                 END
  845.               END
  846.             END
  847.             SaveBrush 'FORCE FILE 'curfname' FORMAT PNG OPTIONS "PROGDSP=0" "COMPR=6" "AUTO=1"'
  848.             IF RC > 0 THEN DO
  849.               errcode = RC
  850.               IF RC = 5 THEN
  851.                 errmess = 'User abort during save.'
  852.               ELSE
  853.                 errmess = 'Error 'RC' during save.'
  854.             END
  855.             FreeBrush FORCE
  856.           END
  857.           ELSE DO
  858.             errcode = RC
  859.             IF RC = 5 THEN
  860.               errmess = 'User abort during load.'
  861.             ELSE
  862.               errmess = 'Error 'RC' during load.'
  863.           END
  864.         END
  865.       END
  866.       IF errcode > 0 THEN BREAK
  867.     END
  868.     IF errcode > 0 THEN DO
  869.       SAY errmess
  870.       RequestNotify 'PROMPT="'errmess'"'
  871.     END
  872.     Set '"ICONS='iconmode'"'
  873.     CALL CLOSE('listfile')
  874.   END
  875.   ADDRESS COMMAND 'Delete >NIL: 'tmpfname
  876. UnlockGUI
  877. @{BODY}
  878. @ENDNODE
  879. @NODE GifToPngRem "GIF to PNG ARexx Script - Comments"
  880. @TOC PNG
  881. @{CODE}
  882. @{B}GIF to PNG ARexx Script - Comments@{UB}
  883. This script asks the user to specify a directory, scans the directory
  884. and its subdirectories and converts all GIF files it finds into PNG.
  885. Non-GIF files are not affected. Icon images are preserved. Icon format
  886. information is updated (Tool Types: FILETYPE=PNG). GIF Author, Copyright
  887. and Comment fields are translated to PNG equivalents. File name suffixes
  888. are changed (i.e. the files are renamed) as follows:
  889.   .gif   -> .png
  890.   .GIF   -> .PNG
  891.   .Gif   -> .Png, ecc.
  892.   others -> unchanged
  893. Personal Paint identifies the file type by its contents (not by the file
  894. name suffix). If the script runs during Workbench use, the Workbench Update
  895. menu item must be selected to visually update the contents of any windows
  896. containing files being renamed by this script.
  897. This script requires Personal Paint version 6.3 (PPaint Rexx version 2)
  898. or higher, personal_png_io.library (enclosed with PPaint), and
  899. personal_gif_io.library (available via free electronic distribution).
  900. Possible changes that could be applied to this file:
  901.   Convert all images to PNG (not just GIFs). To do this, change the line
  902.   selecting GIFs to IF UPPER(RESULT) ~= 'PNG' THEN DO. However, be careful
  903.   if you have IFF animations, as they can be loaded as ILBM images unless
  904.   they are filtered out (IFF animations begin with an ILBM image).
  905.   Activate PNG Adam 7 progressive display in files being written. This
  906.   degrades compression but the resulting images appear more nicely when
  907.   displayed by progressive viewers. Set PROGDSP=1.
  908.   Convert any file to uncompressed IFF-ILBM. This may be good for files to
  909.   be stored on an Amiga CD-ROM, where loading speed could be more important
  910.   than compression. Remove the instructions selecting only GIFs and replace
  911.   the PNG FORMAT option with FORMAT ILBM OPTIONS "COMPR=0" "SCRFMT=0".
  912. PNG was designed as a replacement and extension to GIF and LZW-based TIFF,
  913. after Unisys Corporation began demanding royalties on GIF/LZW code. As
  914. the PNG specification was released in May 1995, it gained general
  915. recognition as the best lossless standard for storing digital images.
  916. Cloanto, the first software house to publish a paint program supporting the
  917. PNG file format, is also making available a PNG developer's kit for the
  918. Amiga. This includes instructions for using personal_png_io.library, and is
  919. a commercial product. A PNG @{" DataType " LINK Installation} is available at no cost for free
  920. electronic distribution.
  921. An @{" Article " LINK Article} on the GIF/LZW issue can be requested by sending E-mail to
  922.   <gltext1@cloanto.it>
  923. For more information, or suggestions, please address E-mail to
  924.   <info@cloanto.it>
  925. @{BODY}
  926. @ENDNODE
  927. @NODE DataTypes "DataTypes"
  928. @TOC Main
  929. @{B}Amiga DataTypes@{UB}
  930. Amiga DataTypes provide an object oriented approach for determining and
  931. handling data types. A simple DataType consists of one short format
  932. descriptor file (stored in DEVS:DataTypes) and a library containing code
  933. to process that dataype (stored in SYS:Classes/DataTypes).
  934. A format descriptor file simply describes how to recognize a file. For
  935. example, it could list the initial bytes (if all files of that format have
  936. a standard header). This is how the PNG format descriptor works. The
  937. system of format descriptions can be used by applications to identify
  938. various file formats (for example, to assign appropriate Workbench icons
  939. to files that don't come with an icon). Beyond that, the DataType I/O
  940. libraries allow applications to handle different formats without
  941. re-implementing the same format again and again.
  942. In theory, DataTypes should be documented in the original Amiga
  943. documentation. In the 3.1 Amiga Developer Update disk set, documentation
  944. can be found in Docs/datatypes.doc, Tutorial/DataTypes and
  945. Examples2/DataTypes.
  946. In practice, the original release of the documentation was not very
  947. complete, and it has allowed very few developers to implement support for
  948. DataTypes in their applications. At Cloanto we felt the same problem, and
  949. for this reason we would now like to share some of our own source code
  950. with other developers.
  951. The @{" C source code " LINK Source} of a DataType-based image viewer is included here.
  952. @ENDNODE
  953. @NODE Source "C Source Code"
  954. @TOC MAIN
  955. @{CODE}
  956.    ViewDT
  957.    Simple DataType-based Picture Viewer
  958.    Syntax:
  959.       ViewDT FILES/A
  960.    Examples:
  961.       ViewDT pictures:space/#?.pic
  962.       ViewDT portrait.png
  963.    Source Code Version:
  964.       $VER: ViewDT.c 43.1
  965.    Status:
  966.       Public Domain
  967.    If you require more information please send E-mail to <info@cloanto.it>
  968. #include <exec/types.h>
  969. #include <exec/memory.h>
  970. #include <graphics/gfx.h>
  971. #include <graphics/displayinfo.h>
  972. #include <intuition/intuitionbase.h>
  973. #include <intuition/gadgetclass.h>
  974. #include <datatypes/datatypes.h>
  975. #include <datatypes/datatypesclass.h>
  976. #include <datatypes/pictureclass.h>
  977. #include <proto/exec.h>
  978. #include <proto/dos.h>
  979. #include <proto/graphics.h>
  980. #include <proto/intuition.h>
  981. #include <proto/datatypes.h>
  982. #include <string.h>
  983. #include <stdio.h>
  984. struct Picture
  985.    struct BitMapHeader bmhd;  /* format and infos */
  986.    struct BitMap *bmap;       /* bitmap */
  987.    ULONG *palette;            /* color table in LoadRGB32() format */
  988.    LONG palette_size;         /* mem usage */
  989.    LONG palette_entries;      /* number of colors */
  990.    ULONG display_ID;          /* video mode */
  991.    UBYTE *author;             /* author info */
  992.    UBYTE *copyright;          /* copyright info */
  993.    UBYTE *annotation;         /* other info */
  994.    LONG author_size;          /* mem usage */
  995.    LONG copyright_size;       /* mem usage */
  996.    LONG annotation_size;      /* mem usage */
  997. void FreePicture(struct Picture *pic);
  998. LONG GetDataTypesPicture(UBYTE *file_name, struct Picture *pic, ULONG);
  999. BOOL IsDataTypes(UBYTE *file_name, UBYTE *name_buff, LONG nbuff_size);
  1000. BOOL ViewPicture(struct Picture *pic);
  1001. struct IntuitionBase *IntuitionBase;
  1002. struct GfxBase *GfxBase;
  1003. struct Library *DataTypesBase;
  1004.    IsDataTypes
  1005.    Parameters
  1006.       file_name: name of the file to inspect
  1007.       name_buff: (optional) buffer to store the file format name
  1008.       nbuff_size: size of name_buff
  1009.    Return value
  1010.       TRUE if DataTypes recognized the file as a valid picture file
  1011.       FALSE otherwise
  1012. BOOL IsDataTypes(UBYTE *file_name, UBYTE *name_buff, LONG nbuff_size)
  1013.    struct DataType *dtn;
  1014.    struct DataTypeHeader *dth;
  1015.    BPTR lock;
  1016.    BOOL it_is;
  1017.    it_is = FALSE;
  1018.    if (lock = Lock(file_name, ACCESS_READ))
  1019.       /* inspect file */
  1020.       if (dtn = ObtainDataTypeA(DTST_FILE, (APTR)lock, NULL))
  1021.       {
  1022.          dth = dtn->dtn_Header;
  1023.          if (dth->dth_GroupID == GID_PICTURE)   /* is it a picture? */
  1024.          {
  1025.             it_is = TRUE;
  1026.             if (name_buff)
  1027.             {
  1028.                strncpy(name_buff, dth->dth_Name, nbuff_size);
  1029.                *(name_buff + nbuff_size - 1) = 0;  /* safe strncpy() termination */
  1030.             }
  1031.          }
  1032.          ReleaseDataType(dtn);
  1033.       }
  1034.       UnLock(lock);
  1035.    return(it_is);
  1036.    GetDataTypesPicture
  1037.    Parameters
  1038.       file_name: name of the file to load
  1039.       pic: work structure
  1040.       bmap_flags: AllocBitMap() flags (BMF_DISPLAYABLE, BMF_INTERLEAVED etc.)
  1041.    Return value
  1042.       0 if successful (picture info and data in "pic" structure) or
  1043.       error code as from dos.library IoErr() function
  1044. LONG GetDataTypesPicture(UBYTE *file_name, struct Picture *pic, ULONG bmap_flags)
  1045.    Object *obj;
  1046.    struct BitMapHeader *bmh;
  1047.    struct BitMap *bmap;
  1048.    struct gpLayout layout;
  1049.    ULONG *creg, *ctab;
  1050.    UBYTE *str;
  1051.    LONG ncol, crsize, err;
  1052.    memset(pic, 0, sizeof(struct Picture));   /* clear pic structure */
  1053.    err = 0;
  1054.    if (obj = NewDTObject(file_name,
  1055.                          DTA_SourceType, DTST_FILE,
  1056.                          DTA_GroupID, GID_PICTURE,
  1057.                          PDTA_Remap, FALSE,
  1058.                          TAG_DONE))    /* get the picture object */
  1059.       if (GetDTAttrs(obj,
  1060.                      PDTA_ModeID, &pic->display_ID,
  1061.                      PDTA_BitMapHeader, &bmh,
  1062.                      TAG_DONE) == 2)   /* get the bitmap_header and mode_id */
  1063.       {
  1064.          pic->bmhd = *bmh;
  1065.          /*
  1066.             query the object about its author, copyright and annotation
  1067.          */
  1068.          if (GetDTAttrs(obj, DTA_ObjAuthor, &str, TAG_DONE) == 1)
  1069.          {
  1070.             if (str)
  1071.             {
  1072.                pic->author_size = strlen(str) + 1;
  1073.                if (pic->author = AllocMem(pic->author_size, 0))
  1074.                   strcpy(pic->author, str);
  1075.             }
  1076.          }
  1077.          if (GetDTAttrs(obj, DTA_ObjCopyright, &str, TAG_DONE) == 1)
  1078.          {
  1079.             if (str)
  1080.             {
  1081.                pic->copyright_size = strlen(str) + 1;
  1082.                if (pic->copyright = AllocMem(pic->copyright_size, 0))
  1083.                   strcpy(pic->copyright, str);
  1084.             }
  1085.          }
  1086.          if (GetDTAttrs(obj, DTA_ObjAnnotation, &str, TAG_DONE) == 1)
  1087.          {
  1088.             if (str)
  1089.             {
  1090.                pic->annotation_size = strlen(str) + 1;
  1091.                if (pic->annotation = AllocMem(pic->annotation_size, 0))
  1092.                   strcpy(pic->annotation, str);
  1093.             }
  1094.          }
  1095.          layout.MethodID = DTM_PROCLAYOUT;   /* render the object */
  1096.          layout.gpl_GInfo = NULL;
  1097.          layout.gpl_Initial = TRUE;
  1098.          if (DoDTMethodA(obj, NULL, NULL, (Msg)&layout))
  1099.          {
  1100.             if (GetDTAttrs(obj,
  1101.                            PDTA_BitMap, &bmap,
  1102.                            PDTA_CRegs, &creg,
  1103.                            PDTA_NumColors, &ncol,
  1104.                            TAG_DONE) == 3)   /* get the bitmap and its colors */
  1105.             {
  1106.                if (bmap != NULL && creg != NULL && ncol != 0)
  1107.                {
  1108.                   crsize = (ncol * 3) * 4;
  1109.                   pic->palette_entries = ncol;
  1110.                   pic->palette_size = crsize + (2 * 4);  /* LoadRGB32() table requirements */
  1111.                   if (pic->palette = AllocMem(pic->palette_size, 0))
  1112.                   {
  1113.                      ctab = pic->palette;
  1114.                      *ctab++ = (ncol << 16) | 0;   /* number of colors and first color to load */
  1115.                      memcpy(ctab, creg, crsize);
  1116.                      *(ctab + (crsize / 4)) = 0;   /* terminator */
  1117.                   }
  1118.                   else err = ERROR_NO_FREE_STORE;
  1119.                   if (pic->bmap = AllocBitMap(pic->bmhd.bmh_Width, pic->bmhd.bmh_Height, pic->bmhd.bmh_Depth, bmap_flags, bmap))
  1120.                   {
  1121.                      BltBitMap(bmap, 0,0, pic->bmap, 0,0, pic->bmhd.bmh_Width, pic->bmhd.bmh_Height, 0xC0, 0xFF, NULL);
  1122.                      WaitBlit();
  1123.                   }
  1124.                   else err = ERROR_NO_FREE_STORE;
  1125.                }
  1126.                else err = ERROR_REQUIRED_ARG_MISSING;
  1127.             }
  1128.             else err = IoErr();
  1129.          }
  1130.          else err = IoErr();
  1131.       }
  1132.       else err = ERROR_REQUIRED_ARG_MISSING;
  1133.       DisposeDTObject(obj);   /* free the object */
  1134.    else err = IoErr();
  1135.    if (err)
  1136.       FreePicture(pic);
  1137.    return(err);
  1138.    FreePicture
  1139.    Parameters
  1140.       pic: Picture structure with resources to free
  1141.    Return value
  1142.       none
  1143. void FreePicture(struct Picture *pic)
  1144.    if (pic->bmap)
  1145.       WaitBlit();
  1146.       FreeBitMap(pic->bmap);
  1147.    if (pic->palette)
  1148.       FreeMem(pic->palette, pic->palette_size);
  1149.    if (pic->author)
  1150.       FreeMem(pic->author, pic->author_size);
  1151.    if (pic->copyright)
  1152.       FreeMem(pic->copyright, pic->copyright_size);
  1153.    if (pic->annotation)
  1154.       FreeMem(pic->annotation, pic->annotation_size);
  1155.    memset(pic, 0, sizeof(struct Picture));   /* clear it all */
  1156.    ViewPicture
  1157.    Parameters
  1158.       pic: picture infos and data
  1159.    Return value
  1160.       TRUE if the user cancelled the view sequence (<Esc> key)
  1161.       FALSE otherwise
  1162. BOOL ViewPicture(struct Picture *pic)
  1163.    struct Screen *scr;
  1164.    struct Window *win;
  1165.    struct IntuiMessage *imsg;
  1166.    BOOL done, quit;
  1167.    done = quit = FALSE;
  1168.    if (scr = OpenScreenTags(NULL,
  1169.                SA_Width, pic->bmhd.bmh_Width,
  1170.                SA_Height, pic->bmhd.bmh_Height,
  1171.                SA_Depth, pic->bmhd.bmh_Depth,
  1172.                SA_Quiet, TRUE,
  1173.                SA_ShowTitle, FALSE,    /* no title bar */
  1174.                SA_Behind, TRUE,
  1175.                SA_Type, CUSTOMSCREEN,
  1176.                SA_DisplayID, pic->display_ID,
  1177.                SA_Overscan, OSCAN_TEXT,
  1178.                SA_AutoScroll, TRUE,
  1179.                SA_Colors32, pic->palette,
  1180.                SA_BackFill, LAYERS_NOBACKFILL,  /* no screen-clearing when the window is closed (is faster) */
  1181.                TAG_END))
  1182.       if (win = OpenWindowTags(NULL,
  1183.                WA_Width, scr->Width,
  1184.                WA_Height, scr->Height,
  1185.                WA_IDCMP, MOUSEBUTTONS | VANILLAKEY,
  1186.                WA_CustomScreen, scr,
  1187.                WA_Backdrop, TRUE,
  1188.                WA_Borderless, TRUE,
  1189.                WA_Activate, TRUE,
  1190.                WA_RMBTrap, TRUE,
  1191.                WA_SimpleRefresh, TRUE,
  1192.                WA_BackFill, LAYERS_NOBACKFILL,  /* no screen-clearing when the window is opened (is faster) */
  1193.                TAG_END))
  1194.       {
  1195.          BltBitMap(pic->bmap, 0,0, scr->RastPort.BitMap, 0,0, pic->bmhd.bmh_Width, pic->bmhd.bmh_Height, 0xC0, 0xFF, NULL);
  1196.          WaitBlit();
  1197.          ScreenToFront(scr);  /* show the screen only when the picture has been copied to it */
  1198.          while (!done)
  1199.          {
  1200.             Wait(1 << win->UserPort->mp_SigBit);
  1201.             while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort))
  1202.             {
  1203.                switch (imsg->Class)
  1204.                {
  1205.                   case VANILLAKEY:
  1206.                      switch (imsg->Code)
  1207.                      {
  1208.                         case 27:  done = quit = TRUE;  break;  /* <Esc> = cancel */
  1209.                         case 13:
  1210.                         case 32:  done = TRUE;  break;   /* <Enter> / <Space> = continue */
  1211.                      }
  1212.                      break;
  1213.                   case MOUSEBUTTONS:
  1214.                      switch (imsg->Code)
  1215.                      {
  1216.                         case SELECTUP:    /* MButton = continue */
  1217.                         case MIDDLEUP:
  1218.                         case MENUUP:   done = TRUE;  break;
  1219.                      }
  1220.                      break;
  1221.                }
  1222.                ReplyMsg((struct Message *)imsg);
  1223.             }
  1224.          }
  1225.          CloseWindow(win);
  1226.       }
  1227.       CloseScreen(scr);
  1228.    return(quit);
  1229. void main(int argc, char *argv[])
  1230.    #define AP_BUFFSIZE  240
  1231.    #define PT_SIZE      80
  1232.    struct Picture pic;
  1233.    struct AnchorPath *ap;
  1234.    UBYTE pic_type[PT_SIZE];
  1235.    LONG err;
  1236.    BOOL quit;
  1237.    if (argc > 1)
  1238.       if (IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 39))
  1239.       {
  1240.          if (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 39))
  1241.          {
  1242.             if (DataTypesBase = OpenLibrary("datatypes.library", 39))
  1243.             {
  1244.                if (ap = AllocMem(sizeof(struct AnchorPath) + AP_BUFFSIZE, MEMF_CLEAR))
  1245.                {
  1246.                   ap->ap_Strlen = AP_BUFFSIZE;
  1247.                   for (err = MatchFirst(argv[1], ap); err == 0; err = MatchNext(ap))
  1248.                   {
  1249.                      if (IsDataTypes(ap->ap_Buf, pic_type, PT_SIZE))
  1250.                      {
  1251.                         if (GetDataTypesPicture(ap->ap_Buf, &pic, 0) == 0)
  1252.                         {
  1253.                            printf("%s (%s, %dx%d, %d colors)\n",
  1254.                                     ap->ap_Info.fib_FileName,
  1255.                                     pic_type,
  1256.                                     pic.bmhd.bmh_Width,
  1257.                                     pic.bmhd.bmh_Height,
  1258.                                     pic.palette_entries);
  1259.                            if (pic.author)
  1260.                               printf("      author: %s\n", pic.author);
  1261.                            if (pic.copyright)
  1262.                               printf("   copyright: %s\n", pic.copyright);
  1263.                            if (pic.annotation)
  1264.                               printf("  annotation: %s\n", pic.annotation);
  1265.                            quit = ViewPicture(&pic);
  1266.                            FreePicture(&pic);
  1267.                            if (quit)
  1268.                               break;
  1269.                         }
  1270.                      }
  1271.                   }
  1272.                   MatchEnd(ap);
  1273.                   FreeMem(ap, sizeof(struct AnchorPath) + AP_BUFFSIZE);
  1274.                }
  1275.                CloseLibrary(DataTypesBase);
  1276.             }
  1277.             CloseLibrary((struct Library *)GfxBase);
  1278.          }
  1279.          CloseLibrary((struct Library *)IntuitionBase);
  1280.       }
  1281. @{BODY}
  1282. @ENDNODE
  1283. @NODE PPaint "Personal Paint"
  1284. @TOC Main
  1285. @{B}Cloanto Personal Paint 6.4@{UB}
  1286. Personal Paint is a powerful and intuitive paint, image processing,
  1287. animation and 24-bit printing package. Employ stunning effects like
  1288. transparencies, emboss, water-colors and stereograms (as in "Magic Eye"),
  1289. while virtual memory frees precious Chip RAM by using other storage
  1290. resources! Plus: support of RTG graphics cards, different file formats
  1291. (IFF, PNG, PCX, encrypted, C source code, DataTypes etc.), nine brushes,
  1292. two independent working environments, multi-level Undo/Redo, animation
  1293. storyboard, B
  1294. zier curves, autoscroll painting, professional color
  1295. reduction, superior text editor, color fonts, PostScript output, screen
  1296. grabber, ARexx...
  1297. @{I}Features of Personal Paint 6.4 Include: @{UI}
  1298. - First paint program worldwide to support the PNG (Portable Network
  1299.   Graphics) file format. Includes an ARexx script to convert GIFs to PNG.
  1300. - Animation (featuring a storyboard, superior compression, multiple
  1301.   palettes, frame-by-frame timing, ANIM-5/7/8 and hybrid formats, etc.)
  1302. - Sophisticated "behind the scenes" memory management, including virtual
  1303.   memory (swaps inactive image data to Fast RAM and disk storage) and
  1304.   multiple levels of undo and redo
  1305. - New, faster image processing effects, including transparencies, alpha
  1306.   channel and single image stereograms (both SIRDS and custom pattern
  1307.   stereograms, as in "Magic Eye")
  1308. - Support of Retargetable Graphics (display cards like the Picasso,
  1309.   Retina, Piccolo, Rainbow, EGS, Talon, Cybergraphics etc.)
  1310. - Animation on RTG display cards (with or without double-buffering)
  1311. - Direct, high quality 24-bit printing (Color and Black & White) and
  1312.   interface to third-party software such as Studio Print Server
  1313. - Professional and fast modes for converting 24-bit pictures (IFF, PNG,
  1314.   PCX, PBM etc.) to 256 colors or less
  1315. - HAM, HAM8 and Picasso 24-bit viewer active during color reduction
  1316. - External input/output modules (loaders and savers) for easy extensions
  1317.   and upgrades. Modules for IFF, PNG, PCX, PBM, Amiga DataTypes and
  1318.   several others are included. GIF module is available from public
  1319.   domain sources.
  1320. - Support and editing of IFF, PNG and GIF project annotations (Author,
  1321.   Copyright and Comment fields, plus Amiga filenotes)
  1322. - Autoscroll painting
  1323. - Workbench Application Icon (Drag and Drop)
  1324. - Basic set of ARexx commands for presentations, format conversions and
  1325.   printing
  1326. - ASL-compatible file requester
  1327. - More power through machine language code: the software is in part up
  1328.   to 500% faster
  1329. - "New Look" user interface
  1330. - A collection of utilities, including color fonts and new DeskJet printer
  1331.   drivers (up to four inks)
  1332. @{I}Requirements: @{UI}
  1333. - 1 Mbyte RAM, 1 disk drive required; 1 Mbyte of Chip RAM recommended
  1334. - Amiga Kickstart from 1.2, Amiga Workbench from 1.3
  1335. - Actively exploits 2.x and 3.x operating systems, FPU, CPU Cache RAM and
  1336.   RTG boards
  1337. - JPEG DataType requires at least 68020 CPU
  1338. @{B}New from Cloanto: Personal Suite CD-ROM@{PLAIN}
  1339. @{I}Quality Amiga CD-ROM @{PLAIN}
  1340. This CD-ROM includes Personal Paint and Personal Write from Cloanto, SBase
  1341. 4 Personal (from Oxxi), Personal Fonts Maker 1 & 2 (Cloanto), 27
  1342. professional Kara color fonts (Kara Computer Graphics), Cloanto's DirDiff
  1343. (file synchronization and replication software) and PNG Toolkit, plus 
  1344. Gbyte of pictures, animations, stereograms, stereogram animations, Amiga
  1345. fonts, printer downloadable fonts and texts.
  1346. The Personal Suite CD-ROM contains no public domain or shareware software.
  1347. The commercial titles are the latest versions available, with full
  1348. AmigaGuide manuals (English and German, with some titles also in Italian
  1349. and French).
  1350. Famous Amiga artists like Jim Sachs participated with a selection of their
  1351. best Amiga art. Also included, a compilation of animations by Eric
  1352. Schwartz, for the first time in IFF ANIM format.
  1353. The CD-ROM also contains an extended version of the PNG Toolkit, with PNG
  1354. test files, full PNG specs, documentation and reference source code.
  1355. @{B}New from Cloanto: The Kara Collection CD-ROM@{PLAIN}
  1356. @{I}The Complete Collection @{PLAIN}
  1357. A professional and unique collection of fonts, backgrounds and tools for
  1358. special effects in pictures, animations, titling and presentations. All
  1359. items for solo or combined use.
  1360. The CD-ROM contains 80 ColorFonts (including effects like brick, glass,
  1361. chrome, chisel, etc.), 5 AnimFonts (handwriting, rotating characters,
  1362. static wipes, sparkles, etc.), hundreds of alternate color palettes,
  1363. Starfields (moving stars seen from different perspectives), textures and
  1364. backgrounds (granite, marble, sand-stone, wood, etc.), the Personal Fonts
  1365. Maker software and an anim-brush upgrade for Personal Paint.
  1366. @{I}For more information: @{UI}
  1367.  @{" Distributors " LINK Distributors}
  1368.  @{" Orders " LINK Orders}
  1369.  @{" Cloanto " LINK Cloanto}
  1370. @ENDNODE
  1371. @NODE Orders "Orders"
  1372. @TOC PPaint
  1373. @{B}Orders@{UB}
  1374. For availability and pricing information regarding all Cloanto packages
  1375. and upgrades, please contact Cloanto. Orders can be e-mailed to
  1376. <orders@cloanto.it>.
  1377. If you wish to order with credit card payment, please indicate the card
  1378. number, expiration date and the cardholder's name and date of birth. If
  1379. no price is indicated in the order, it will be indicated to you for
  1380. confirmation before proceeding.
  1381. @{I}For more information: @{UI}
  1382.  @{" Distributors " LINK Distributors}
  1383.  @{" Cloanto " LINK Cloanto}
  1384. @ENDNODE
  1385. @NODE Distributors "Distributors"
  1386. @TOC PPaint
  1387. @{B}Cloanto Distributors@{UB}
  1388. @{I}North America: @{UI}
  1389. Software Hut, Inc.                       Tel +1 610 586-5701
  1390. Folcroft East Business Park              Fax +1 610 586-5706
  1391. 313 Henderson Drive
  1392. USA - Sharon Hill, PA 19079
  1393. @{I}Great Britain: @{UI}
  1394. Digita International Limited             Tel +44 1395 270273
  1395. Black Horse House                        Fax +44 1395 268893
  1396. GB - Exmouth  EX8 1JL                    E-mail <sales@digita.demon.co.uk>
  1397. Meridian Software Distribution Ltd.      Tel +44 181 5433500
  1398. East House                               Fax +44 181 5432255
  1399. East Road Industrial Estate
  1400. GB - London SW19 1AH
  1401. @{I}German Area: @{UI}
  1402. Casablanca Multimedia GmbH               Tel +49 234 72035
  1403. Wiemelhauser Stra
  1404. e 247 a                Fax +49 234 72060
  1405. D - 44799 Bochum
  1406. @{I}Belgium: @{UI}
  1407. Amiga City - G.E.S.                      Tel +32 2 7366111
  1408. Avenue du Price Heritier, 176            Fax +32 2 7722401
  1409. B - 1200 Bruxelles
  1410. @{I}The Netherlands: @{UI}
  1411. Barlage Computer Hardware                Tel +31 45 425881
  1412. Kaalheidersteenweg 262                   Fax +31 45 424411
  1413. NL - 6467 AH Kerkrade
  1414. @{I}Danemark: @{UI}
  1415. Epic Data                                Tel +45 59 93 10 25
  1416. sterlyngvej 1                           Fax +45 59 93 20 54
  1417. DK - 4500 Nyk
  1418. bing Sj
  1419. lland
  1420. @{I}Sweden: @{UI}
  1421. ProComp                                  Tel +46 472 70845
  1422. Box 46                                   Fax +46 472 71680
  1423. S - 340 36 Moheda                        Bbs +46 472 71270
  1424. @{I}France: @{UI}
  1425. Cuda Informatique sarl                   Tel +33 1 42 46 47 48
  1426. 31, rue de Trevise                       Fax +33 1 42 46 47 01
  1427. F - 75009 Paris
  1428. @{I}Greece: @{UI}
  1429. Multi-RAK                                Tel +49 234 9489411
  1430. Karnassiotis & Radouniklis GBR           Fax +49 234 9489444
  1431. Prinz-Regent-Stra
  1432. D - 44795 Bochum
  1433. @{I}Australia and New Zealand: @{UI}
  1434. Amadeus Computers Pty Ltd                Tel +61 2 651-1711
  1435. Suite 1, 534 Old Northern Road           Fax +61 2 651-1710
  1436. Round Corner NSW 2158
  1437. Australia
  1438. @{I}Italy: @{UI}
  1439. Db-Line srl                              Tel +39 332 767270
  1440. Viale Rimembranze 26/C                   Fax +39 332 767244
  1441. I - 21024 Biandronno  VA                 Bbs +39 332 767329
  1442. @{I}Italy (OEM): @{UI}
  1443. CTO spa                                  Tel +39 51 753133
  1444. Via Piemonte 7/f                         Fax +39 51 753418
  1445. I - 40069 Zola Predosa  BO
  1446. @{I}For more information: @{UI}
  1447.  @{" Orders " LINK Orders}
  1448.  @{" Cloanto " LINK Cloanto}
  1449. @ENDNODE
  1450. @NODE Legal "Legal Notes"
  1451. @TOC Main
  1452. @{B}Legal Notes@{UB}
  1453. These notes apply to the PNG DataType and support files, stored in the
  1454. PNG_dt.lha archive. The material is offered at no charge for personal
  1455. @{B}Copyright@{UB}
  1456. The collection and the individual files stored in this archive are
  1457. Copyright 
  1458.  1995 Cloanto Italia srl (Cloanto), unless otherwise indicated
  1459. in the files or in the following notice.
  1460. The PNG format descriptor file (92 bytes of length, stored in
  1461. DEVS:DataTypes) and the C source code example (ViewDT.c) contained in this
  1462. document are hereby placed in the public domain.
  1463. @{B}Disclaimer and Limitation of Liability@{UB}
  1464. This software is provided "as is", without warranty of any kind, either
  1465. expressed or implied, statutory or otherwise. By using the archive and its
  1466. contents, you accept the entire risk as to its quality and performance.
  1467. Neither Cloanto nor any other party involved in the creation, production
  1468. or delivery of the archive and its contents shall be liable for any
  1469. direct, indirect, special, consequential or incidental damages, including
  1470. without limitation damages for loss of profits, loss of use or loss of
  1471. anticipated costs, expenses or damages, and any data or information which
  1472. may be lost or rendered inaccurate, even if Cloanto is advised of the
  1473. possibility of such damages.
  1474. @{B}Distribution@{UB}
  1475. Cloanto authorizes all types of online (electronic) distribution of the
  1476. unmodified archive, as long as the archive is neither sold nor included in
  1477. another product. Other types of distribution, and storage on magnetic,
  1478. optical or other type of media other than for online distribution and
  1479. personal use require written permission or license from Cloanto. The
  1480. following section ("Specific Publications") contains a permission valid
  1481. for certain publications.
  1482. @{B}Specific Publications@{UB}
  1483. Floppy disk based "public domain" collections and distributors thereof
  1484. charging only a nominal fee are hereby authorized to include the
  1485. unmodified archive. This permission does not include CD-ROM collections
  1486. and magazine cover disks, nor does it grant any rights to use the
  1487. "Cloanto" trademark.
  1488. Cloanto hereby specifically authorizes the inclusion of this archive on
  1489. Fred Fish compilations by Amiga Library Services, Aminet by Urban D.
  1490. ller and Meeting Pearls by Angela Schmidt. These organizations may also
  1491. include the complete files of this archive in uncompressed form (please
  1492. make sure that the original file dates are preserved), on floppy disk
  1493. and/or CD-ROM. This permission does not include other organizations
  1494. copying or republishing these collections.
  1495. If you plan to make the archive available to others, please consider
  1496. contacting Cloanto (E-mail <info@cloanto.it>) to check if a newer version
  1497. exists. Sample copies are always appreciated, but not required.
  1498. @{B}Trademarks@{UB}
  1499. Cloanto and the Cloanto logo are registered trademarks, and Personal Fonts
  1500. Maker, PFM, Personal Paint, PPaint, Personal Write, PWrite, Personal Suite
  1501. and PSuite are trademarks of Cloanto Italia srl. All other trademarks,
  1502. property of their respective owners, are acknowledged. Cloanto has made
  1503. every attempt to supply trademark information about manufacturers and
  1504. their products. The following is a list of designations and their owners.
  1505. Amiga and the Commodore-Amiga logo are registered trademarks of ESCOM AG.
  1506. ColorFont and ColorText are trademarks of Inter/Active Softworks.
  1507. CompuServe is a registered trademark, and GIF is a trademark of CompuServe
  1508. Inc., an H&R Block Company. EGS 28/24 Spectrum is a trademark of Great
  1509. Valley Products Inc. Fargo is a registered trademark of Fargo Electronics
  1510. Inc. PCX is a trademark of ZSoft Corp. Picasso is a trademark of Village
  1511. Tronic Marketing GmbH. Piccolo and Rainbow are trademarks of Ingenieurb
  1512. Helfrich. PostScript is a registered trademark of Adobe Systems Inc.
  1513. Primera is a trademark of Fargo Electronics Inc. Retina is a trademark of
  1514. MS MacroSystem Computer GmbH. SBase Personal is a trademark of Oxxi Inc.
  1515. Talon is a trademark of DKB. TIFF is a trademark of Aldus Corp.
  1516. @{I}For more information: @{UI}
  1517.  @{" Cloanto " LINK Cloanto}
  1518. @ENDNODE
  1519. @NODE Cloanto "Cloanto"
  1520. @TOC Main
  1521. @{B}Cloanto - Company Information@{UB}
  1522. Cloanto Italia srl                          Tel +39 432 545902
  1523. PO Box 118                                  Fax +39 432 609051
  1524. 33100 Udine                                 Bbs +39 432 545905
  1525. Italy                                 E-mail <info@cloanto.it>
  1526. @ENDNODE
  1527.